{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([[-0.017612, 14.053064],\n",
       "        [-1.395634,  4.662541],\n",
       "        [-0.752157,  6.53862 ],\n",
       "        [-1.322371,  7.152853],\n",
       "        [ 0.423363, 11.054677],\n",
       "        [ 0.406704,  7.067335],\n",
       "        [ 0.667394, 12.741452],\n",
       "        [-2.46015 ,  6.866805],\n",
       "        [ 0.569411,  9.548755],\n",
       "        [-0.026632, 10.427743]]),\n",
       " array([0, 1, 0, 0, 0, 1, 0, 1, 0, 0]))"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "\n",
    "#加载数据\n",
    "def load_data():\n",
    "    with open('简单逻辑回归.txt') as fr:\n",
    "        lines = fr.readlines()\n",
    "\n",
    "    x = np.empty((len(lines), 2), dtype=float)\n",
    "    y = np.empty(len(lines), dtype=int)\n",
    "    for i in range(len(lines)):\n",
    "        line = lines[i].strip().split(\"\\t\")\n",
    "        x[i] = line[:2]\n",
    "        y[i] = line[2]\n",
    "\n",
    "    return x, y\n",
    "\n",
    "\n",
    "w = np.ones(2)\n",
    "b = 0\n",
    "\n",
    "x, y = load_data()\n",
    "x[:10], y[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "#把线画出来,线就是wx + b = 0\n",
    "def draw():\n",
    "    X = np.arange(x[:, 0].min(), x[:, 0].max(), 1)\n",
    "    Y = np.empty([len(X)])\n",
    "    for i in range(len(X)):\n",
    "        Y[i] = (-w[0] * X[i] - b) / w[1]\n",
    "\n",
    "    plt.scatter(x[:, 0], x[:, 1], c=y)\n",
    "    plt.plot(X, Y)\n",
    "\n",
    "    plt.show()\n",
    "\n",
    "\n",
    "draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.9999992 , 0.96327591, 0.99694057, 0.99707194, 0.99998965,\n",
       "       0.99943269, 0.9999985 , 0.98795104, 0.99995966, 0.9999696 ,\n",
       "       0.99957829, 0.99999951, 0.98717984, 0.99933568, 0.99441681,\n",
       "       0.92561059, 0.99782298, 0.93428995, 0.56149115, 0.99885231,\n",
       "       0.99459987, 0.09526385, 0.99998636, 0.11654725, 0.63366843,\n",
       "       0.9999799 , 0.99976712, 0.005168  , 0.97895738, 0.99998389,\n",
       "       0.97347961, 0.99985691, 0.99999727, 0.02289101, 0.99786778,\n",
       "       0.99994559, 0.99994472, 0.99952565, 0.99997564, 0.9999599 ,\n",
       "       0.94540262, 0.99921369, 0.99993885, 0.84560655, 0.97081778,\n",
       "       0.99990961, 0.05469734, 0.99787402, 0.99997497, 0.99998973,\n",
       "       0.99986451, 0.99995323, 0.99952919, 0.99999952, 0.99855058,\n",
       "       0.99902832, 0.99996875, 0.9999255 , 0.9999761 , 0.98766973,\n",
       "       0.96364394, 0.92063199, 0.99988479, 0.99999725, 0.99999671,\n",
       "       0.09305923, 0.99987754, 0.99999751, 0.99999633, 0.9999638 ,\n",
       "       0.99998486, 0.29543474, 0.99999883, 0.93863125, 0.99996973,\n",
       "       0.99981357, 0.15638953, 0.97043554, 0.99915573, 0.9713646 ,\n",
       "       0.9895634 , 0.01394591, 0.99999447, 0.99998894, 0.64309344,\n",
       "       0.07117749, 0.95268415, 0.99999919, 0.99926947, 0.53451825,\n",
       "       0.34843896, 0.99999951, 0.9999519 , 0.74047292, 0.63198292,\n",
       "       0.96211756, 0.99998941, 0.11658659, 0.99997814, 0.99999971])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def model():\n",
    "\n",
    "    #计算模型\n",
    "    out = x.dot(w) + b\n",
    "\n",
    "    #激活函数,把数据压缩到0-1之间\n",
    "    out = 1 / (1 + np.exp(-out))\n",
    "\n",
    "    return out\n",
    "\n",
    "\n",
    "model()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-9.99999197e-01,  3.67240878e-02, -9.96940571e-01, -9.97071938e-01,\n",
       "       -9.99989645e-01,  5.67308977e-04, -9.99998498e-01,  1.20489575e-02,\n",
       "       -9.99959662e-01, -9.99969602e-01,  4.21711638e-04, -9.99999507e-01,\n",
       "        1.28201638e-02, -9.99335680e-01,  5.58318526e-03,  7.43894117e-02,\n",
       "        2.17702199e-03,  6.57100468e-02,  4.38508855e-01,  1.14768737e-03,\n",
       "        5.40013262e-03,  9.04736155e-01, -9.99986359e-01,  8.83452746e-01,\n",
       "        3.66331566e-01, -9.99979903e-01, -9.99767121e-01,  9.94831999e-01,\n",
       "        2.10426242e-02, -9.99983887e-01,  2.65203902e-02,  1.43088377e-04,\n",
       "       -9.99997273e-01,  9.77108991e-01,  2.13222445e-03, -9.99945588e-01,\n",
       "       -9.99944721e-01, -9.99525652e-01, -9.99975643e-01, -9.99959899e-01,\n",
       "        5.45973797e-02,  7.86306717e-04, -9.99938855e-01,  1.54393446e-01,\n",
       "        2.91822248e-02, -9.99909612e-01,  9.45302656e-01,  2.12598035e-03,\n",
       "       -9.99974971e-01, -9.99989730e-01, -9.99864510e-01, -9.99953232e-01,\n",
       "       -9.99529185e-01, -9.99999523e-01,  1.44941614e-03,  9.71681819e-04,\n",
       "       -9.99968751e-01,  7.45047626e-05, -9.99976095e-01,  1.23302718e-02,\n",
       "        3.63560588e-02,  7.93680092e-02, -9.99884785e-01, -9.99997250e-01,\n",
       "       -9.99996707e-01,  9.06940772e-01,  1.22463140e-04, -9.99997513e-01,\n",
       "       -9.99996331e-01, -9.99963801e-01, -9.99984864e-01,  7.04565261e-01,\n",
       "       -9.99998833e-01,  6.13687471e-02, -9.99969733e-01, -9.99813572e-01,\n",
       "        8.43610473e-01,  2.95644605e-02,  8.44267117e-04,  2.86354048e-02,\n",
       "       -9.89563400e-01,  9.86054091e-01, -9.99994469e-01,  1.10627487e-05,\n",
       "        3.56906565e-01,  9.28822507e-01,  4.73158539e-02, -9.99999192e-01,\n",
       "        7.30531068e-04,  4.65481746e-01,  6.51561036e-01, -9.99999505e-01,\n",
       "       -9.99951895e-01,  2.59527082e-01,  3.68017084e-01,  3.78824388e-02,\n",
       "       -9.99989406e-01,  8.83413408e-01, -9.99978135e-01, -9.99999711e-01])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#求误差,就是简单的求差\n",
    "def loss(pred):\n",
    "    return y - pred\n",
    "\n",
    "\n",
    "loss(model())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ -19.32519789, -510.00958751]), -33.27040236798686)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#求梯度\n",
    "def gradient(loss):\n",
    "\n",
    "    #简单理解,就是x0*loss + x1*loss = gradient\n",
    "    #也就是说,loss决定了方向和步长,x的值决定了另一个方向和步长.\n",
    "    g_w = x.T.dot(loss)\n",
    "\n",
    "    #简单的求和就完事了\n",
    "    g_b = loss.sum()\n",
    "\n",
    "    return g_w, g_b\n",
    "\n",
    "\n",
    "gradient(loss(model()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 1.12613296, -1.75590228]), 12.898080239716059)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#训练\n",
    "lr = 1e-2\n",
    "for i in range(600):\n",
    "    g_w, g_b = gradient(loss(model()))\n",
    "    w += g_w * lr\n",
    "    b += g_b * lr\n",
    "\n",
    "w, b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画图\n",
    "draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.95"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#预测\n",
    "correct = 0\n",
    "for xi, yi in zip(x, y):\n",
    "    #计算模型\n",
    "    pred = xi.dot(w) + b\n",
    "\n",
    "    #激活函数,把数据压缩到0-1之间\n",
    "    pred = 1 / (1 + np.exp(-pred))\n",
    "\n",
    "    #I函数\n",
    "    pred = 1 if pred > 0.5 else 0\n",
    "\n",
    "    if pred == yi:\n",
    "        correct += 1\n",
    "correct / len(x)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
